import os
import scipy.io
import numpy as np
import matplotlib.pyplot as plt

def visualize_skeleton_simple(mat_file_path):
    """简单可视化骨骼数据"""
    if not os.path.exists(mat_file_path):
        print(f"文件不存在: {mat_file_path}")
        return
    
    print(f"正在加载文件: {mat_file_path}")
    try:
        # 加载mat文件
        mat_data = scipy.io.loadmat(mat_file_path)
        
        # 假设数据存储在'data'变量中
        if 'data' not in mat_data:
            print("文件中没有找到'data'变量")
            return
            
        skeleton_data = mat_data['data']
        print(f"骨骼数据形状: {skeleton_data.shape}")
        
        # 获取帧数和关节点数
        num_frames, num_features = skeleton_data.shape
        num_joints = num_features // 2  # 假设每个关节有x,y两个坐标
        
        print(f"帧数: {num_frames}, 关节点数: {num_joints}")
        
        # 创建多个子图，每个子图显示一帧
        max_frames_to_show = min(10, num_frames)  # 最多显示10帧
        cols = 3
        rows = (max_frames_to_show + cols - 1) // cols
        
        plt.figure(figsize=(15, rows * 4))
        
        for i in range(max_frames_to_show):
            plt.subplot(rows, cols, i + 1)
            
            # 获取当前帧数据
            frame_data = skeleton_data[i]
            
            # 分离X和Y坐标
            x_coords = [frame_data[j] for j in range(0, len(frame_data), 2)]
            y_coords = [frame_data[j + 1] for j in range(0, len(frame_data), 2)]
            
            # 绘制散点图
            plt.scatter(x_coords, y_coords)
            
            # 连接可能的骨骼关节线（简单连接相邻点）
            """
            # 如果您知道关节点的连接关系，可以添加这部分代码
            connections = [(0, 1), (1, 2), ...]  # 根据实际关节定义
            for start, end in connections:
                if start < len(x_coords) and end < len(x_coords):
                    plt.plot([x_coords[start], x_coords[end]], 
                            [y_coords[start], y_coords[end]], 'g-')
            """
            
            # 标记关节点编号
            for j, (x, y) in enumerate(zip(x_coords, y_coords)):
                plt.text(x, y, str(j), fontsize=9)
            
            plt.title(f"帧 {i+1}")
            plt.xlabel("X坐标")
            plt.ylabel("Y坐标")
        
        plt.suptitle(f"骨骼数据可视化 - 共 {num_frames} 帧", fontsize=16)
        plt.tight_layout()
        plt.subplots_adjust(top=0.9)
        plt.show()
        
        # 打印一帧数据，帮助用户理解数据格式
        print("\n第一帧数据格式:")
        print(skeleton_data[0])
        print("\n提示: 每一行数据可能是 [x1, y1, x2, y2, ...] 格式，其中(x1,y1), (x2,y2)等是各个关节点的坐标")
        
    except Exception as e:
        print(f"加载文件时出错: {e}")

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description="简单可视化骨骼数据工具")
    parser.add_argument("mat_file", help="要查看的mat文件的路径")
    
    args = parser.parse_args()
    visualize_skeleton_simple(args.mat_file)
